#include "instrumento.h"
#include "plato.h"
#include "tambor.h"
#include "bombo.h"
#include "entrenador.h"

Instrumento::Instrumento() : QObject(NULL)
{
    Textura* texturaTambor = new Textura(":/entrenador/Resources/tambor.png");
    Textura* texturaPlato = new Textura(":/entrenador/Resources/plato.png");
    Textura* texturaBombo = new Textura(":/entrenador/Resources/dw_bombo.png");

    listaTexturas.append(texturaTambor);
    listaTexturas.append(texturaPlato);
    listaTexturas.append(texturaBombo);

	Bombo* bombo = new Bombo();
	bombo->setNota("bass");
    bombo->setTextura(texturaBombo);
	bombo->setEncuadre(QRectF(35, 43, 22, 18));
    listaPiezas.append(bombo);

	Tambor* caja = new Tambor();
	caja->setNota("snare");
    caja->setTextura(texturaTambor);
	caja->setEncuadre(QRectF(30, 25, 14, 14));
	listaPiezas.append(caja);

	Tambor* timbal = new Tambor();
	timbal->setNota("tom");
    timbal->setTextura(texturaTambor);
	timbal->setEncuadre(QRectF(30, 40, 12, 12));
	listaPiezas.append(timbal);

	Tambor* base = new Tambor();
	base->setNota("base");
    base->setTextura(texturaTambor);
	base->setEncuadre(QRectF(50, 25, 16, 16));
	listaPiezas.append(base);

	Plato* platoHH = new Plato();
	platoHH->setNota("hihat");    
    platoHH->setTextura(texturaPlato);
	platoHH->setEncuadre(QRectF(10, 30, 14, 14));
	listaPiezas.append(platoHH);

 //   Plato* platoHHFoot = new Plato();
	//platoHHFoot->setNota("hhfoot"); 
 //   platoHHFoot->setTextura(texturaPlato);
	//platoHHFoot->setEncuadre(QRectF(10, 30, 14, 14));
	//listaPiezas.append(platoHHFoot);

	Plato* platoCR1 = new Plato();
	platoCR1->setNota("crash");
    platoCR1->setTextura(texturaPlato);
	platoCR1->setEncuadre(QRectF(10, 50, 16, 16));
	listaPiezas.append(platoCR1);

	Plato* platoRD = new Plato();
	platoRD->setNota("ride");
    platoRD->setTextura(texturaPlato);
	platoRD->setEncuadre(QRectF(50, 40, 22, 22));
	listaPiezas.append(platoRD);
}

Instrumento::~Instrumento()
{
    foreach (PiezaInstrumento* pieza, listaPiezas) {
        delete pieza;
    }
}

void Instrumento::dibujar(QPainter* painter, ConversorUnidades* conversor, bool esquema)
{
   foreach (PiezaInstrumento* pieza, listaPiezas) {
        pieza->dibujar(painter, conversor, esquema);
   }
}

int Instrumento::getIndiceNota(int nota)
{	
	QString nombreNota = Entrenador::getInstancia()->getNombreNota(nota);
	return getIndiceNota(nombreNota);
}

int Instrumento::getIndiceNota(const QString& nombreNota)
{
    QString nombreRealNota = Entrenador::getInstancia()->getNombreRealNota(nombreNota);

	for (int i = 0; i < listaPiezas.size(); i++) {
        QString nombreNotaPieza = listaPiezas.at(i)->getNombreNota();
		if (nombreNotaPieza == nombreNota || nombreNotaPieza == nombreRealNota) {
			return i;
		}
	}
	return -1;
}


QList<Dibujo*> Instrumento::getListaDibujos()
{
    QList<Dibujo*> listaDibujos;
    foreach (PiezaInstrumento* pieza, listaPiezas) {
        Dibujo3d* dibujo = pieza->getDibujo3d();
        if (dibujo != NULL) {
            listaDibujos.append(dibujo);
        }
    }
    return listaDibujos;
}
	
void Instrumento::actualizar()
{
    foreach (PiezaInstrumento* pieza, listaPiezas) {
        pieza->actualizar();
    }
}